package main

import (
	"fmt"
	"time"
)

/*
*
这段代码中，首先创建了一个变量 a 并将其赋值为 1。然后启动了一个匿名的goroutine，这个goroutine将 a 的值修改为 2，并打印出修改后的值。接着，主goroutine将 a 的值修改为 3，并打印出修改后的值。最后，通过 time.Sleep(1) 语句，主goroutine被暂停了一段时间。

问题出在goroutine的调度和执行时间上。当没有 time.Sleep(1) 时，主goroutine可能在子goroutine之前执行完毕，因此你不会看到子goroutine的输出。但是，当你添加了 time.Sleep(1) 时，主goroutine会休眠一段时间，此时子goroutine有机会被调度执行，并打印出 "子goroutine。。"。

换句话说，没有 time.Sleep(1) 时，主goroutine执行速度太快，导致子goroutine没有足够的时间被调度执行；而添加了 time.Sleep(1) 后，主goroutine休眠了一段时间，给了子goroutine执行的机会。
*/
func main() {
	//var wg sync.WaitGroup
	//wg.Add(1)
	a := 1
	go func() {
		a = 2
		fmt.Println("子goroutine。。", a)
		//wg.Done()
	}()
	a = 3
	time.Sleep(1)
	fmt.Println("main goroutine。。", a)
	//wg.Wait()

	/**
	输出
	子goroutine。。 2
	main goroutine。。 2

	先执行	a = 3 然后再执行了 a = 2
	*/
}
